package main

import "fmt"

/**
方法本身也是可以保存为一个对象
吧对象的方法或者直接从类获取方法,间接触发方法
 */
type Person3 struct {
	name string
	age  int
}

func (t *Person3) PrintPerson3() {
	fmt.Println("Person3 父类方法")
	fmt.Println(*t)
}

type Student3 struct {
	Person3
	xuehao int
}

func main() {
	stu2 := Student3{Person3{"hi", 26}, 22}
	fmt.Println(stu2)
	//吧对象的方法保存为独立的变量,再通过myFun()来触发方法变量或者说方法类型值
	fun_PrintPerson3 := stu2.PrintPerson3
	fmt.Println("对象的'方法对象'可以直接触发")
	fun_PrintPerson3()

	//直接从类获取一个方法,让对象触发
	fun2 := (*Student3).PrintPerson3
	stu3 := new(Student3)
	stu3.Person3.name = "hello"
	stu3.Person3.age = 22
	fmt.Println("通过类获取的的'方法对象'需要对象参数触发")
	fun2(stu3)
}

